package com.runssnail.huafeiduo.api.request.phone;

import com.runssnail.huafeiduo.api.request.GetRequest;
import com.runssnail.huafeiduo.api.response.phone.OrderPhoneListResponse;
import org.apache.commons.lang.StringUtils;

import java.util.Date;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

/**
 * 获得多个订单信息，主要可以用于对账。
 * <p>
 * 时间、状态和订单编号参数至少需要传一个。如果要获取一段时间内的所有订单，则只需要传递时间参数即可。
 * <p>
 * 时间范围不能大于一个月。
 * <p>
 * Created by zhengwei on 2016/3/31.
 */
public class OrderPhoneListRequest extends GetRequest<OrderPhoneListResponse> {

    private static final long serialVersionUID = 8627681556972576566L;

    /**
     * 开始时间	和 end_time 成对出现，格式为 UNIX 时间戳。
     */
    private Date startTime;

    /**
     * 至少传一个	结束时间	和 start_time 成对出现，格式为 UNIX 时间戳。
     */
    private Date endTime;

    /**
     * 订单状态	可以为 success, recharging 或 failure 其中的一个
     */
    private String status;

    /**
     * 至少传一个	订单编号	如果有多个订单号，则订单号之间使用半角逗号分隔
     */
    private String orderId;

    /**
     * page 	页码	每次最多返回 50 条结果，可以使用此参数来控制返回第几页结果
     */
    private int page;

    @Override
    public String getApiUrl() {
        return "http://api.huafeiduo.com/gateway.cgi?mod=order.phone.list";
    }

    @Override
    public Map<String, Object> getParams() {
        SortedMap<String, Object> params = new TreeMap<>();

        if (this.startTime != null) {
            params.put("start_time", this.startTime.getTime() / 1000);
        }

        if (this.endTime != null) {
            params.put("end_time", this.endTime.getTime() / 1000);
        }

        if (StringUtils.isNotBlank(this.status)) {
            params.put("status", this.status);
        }

        if (StringUtils.isNotBlank(this.orderId)) {
            params.put("order_id", this.orderId);
        }

        if (this.page > 0) {
            params.put("page", this.page);
        }

        return params;
    }

    @Override
    public Class<OrderPhoneListResponse> getResponseClass() {
        return OrderPhoneListResponse.class;
    }

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }
}
